<?php
interface Account_WebService_Account_General_V1r0_GeneralInterface
{
	/**
     * Create new account
     * 
     * $ownerInformation keys:
     *  - string $firstName
     *  - string $lastName
     *  - string $dateOfBirth
     *  - string $gender
     *  - string $nickName
     *  - string $mobileNumber
     *  - string $homeNumber
     *  - string $additionalInformation
     *  
     * $deliveryInformation keys:
     *  - string $country
     *  - string $city
     *  - string $postCode
     *  - string $street
     *  - string $houseNumber
     *  - string $secondAddressLine
     *  - string $thirdAddressLine
     *  - string $additionalInformation 
     *  
     * $settings keys:
     *  - locale keys:
     *    - array country 
     *       - string code
     *       - string title
     *    - array language 
     *       - string code
     *       - string title
     * 
     * @param string $customerEmail
     * @param string $password
     * @param string $passwordAgain
     * @param array $ownerInformation
     * @param array $deliveryInformation
     * @param array $settings
     * @param boolean $passwordAutoGenerated
     * 
     * @return void
     */
    public function setupAccount(
        $customerEmail, 
        $password, 
        $passwordAgain, 
        array $ownerInformation = array(),
        array $deliveryInformation = array(),
        array $settings = array(),
        $passwordAutoGenerated = false
    );
    
    /**
     * Activate account by confirmg primary email address
     * 
     * @param string $customerEmail
     * @param string $activationKey
     * 
     * @return void
     */
    public function activateAccount($customerEmail, $activationKey);
    
    /**
     * Authenticate customer
     *
     * @param string $customerEmail
     * @param string $password
     * 
     * @return void
     */
    public function login($customerEmail, $password);

    /**
     * Logout customer
     * 
     * @param string $customerEmail
     * 
     * @return void
     */
    public function logout($customerEmail);

    /**
     * Reset password
     * @param string $customerEmail
     * 
     * @return void
     */
    public function remindPassword($customerEmail);

    /**
     * Remind email activation key
     * 
     * @param string $customerEmail
     * 
     * @return void
     */
    public function remindActivationKey($customerEmail);

    /**
     * Change password
     * 
     * @param string $customerEmail
     * @param string $password
     * 
     * @return void
     */
    public function changePassword($customerEmail, $password);
    
    /**
     * Create new products in account
     * 
     * Available product names:
     *  - my-cool-product
     * 
     * $products:
     *  array(
     *      'my-cool-product' =>
     *      array(
     *          'my-cool-product',
     *          'MyCoolProduct title',
     *          '1', // version
     *          '12', // duration
     *          'license-2', // license code
     *          'full', // license type
     *          array() // additional things
     *      ),
     *  )
     *   
     * @param string $email
     * @param array $products
     * 
     * @return void
     */
    public function addNewProductsInAccount($customerEmail, array $products);
            
    /**
     * Return account information
     * 
     * @param string $customerEmail
     * 
     * @return array
     */
    public function getAccountInformation($customerEmail);
}